package com.zw.a.basic.a15.demo06_reflect_exercise;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.lang.reflect.Method;
import java.util.Properties;

//案例: 通过反射运行配置文件中指定类的指定方法
//目的: 通过反射体验代码的灵活性和扩展性, 更满足十大黄金开发原则之"对修改关闭, 对扩展开放".
public class Demo01 {
    public static void main(String[] args) throws Exception {
        //1. 通过Properties集合类加载数据.
        Properties pp = new Properties();
        pp.load(new FileReader("day15/src/my.properties"));

        //2. 获取类名和方法名.
        String className = pp.getProperty("className");
        String methodName = pp.getProperty("methodName");

        //3. 通过类名获取其对应的字节码文件对象.
        Class<?> clazz = Class.forName(className);

        //4. 获取该类的对象.
        Object obj = clazz.newInstance();

        //5. 通过方法名获取该方法.
        Method method = clazz.getMethod(methodName);

        //6. 执行对应的方法即可.
        method.invoke(obj);
    }
}
